package com.my12306.common.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.my12306.common.model.po.ScheduleJobPo;
import com.my12306.common.model.vo.PageVo;
import com.my12306.common.util.PageUtils;
import com.my12306.common.util.quartz.scheduler.BaseScheduler;
import org.quartz.Scheduler;

import java.util.List;

/**
 * @Author:苏牧夕
 * @Date:2020/5/28 0:25
 * @Version 1.0
 */
public interface ScheduleJobService extends IService<ScheduleJobPo> {

    PageUtils getJobListPage(PageVo pageVo);

    /**
     * 添加定时任务
     *
     * @param scheduleJobPo
     */
    Boolean addCronJob(ScheduleJobPo scheduleJobPo);

    /**
     * 根据ids集来修改状态
     *
     * @param ids
     * @param showStatus
     */
    void updateBatchStatusByIds(List<Long> ids, Integer showStatus);

    /**
     * 修改任务状态
     *
     * @param jobIds        任务id集
     * @param status        状态
     * @param baseScheduler
     * @param scheduler
     * @return
     */
    Boolean updateJob(List<Long> jobIds, Integer status, BaseScheduler baseScheduler, Scheduler scheduler);

    /**
     * 添加定时任务
     *
     * @param scheduleJobPo
     */
    Boolean addSimpleJob(ScheduleJobPo scheduleJobPo);

    /**
     * 修改定时任务
     *
     * @param scheduleJobPo
     */
    Boolean updateCronJob(ScheduleJobPo scheduleJobPo);

    /**
     * 修改定时任务
     *
     * @param scheduleJobPo
     */
    Boolean updateSimpleJob(ScheduleJobPo scheduleJobPo);

    /**
     * 根据定时任务的jobKey来暂停任务
     *
     * @param jobIds
     */
    Boolean pauseJob(List<Long> jobIds);


    /**
     * 暂停所有定时任务
     */
    Boolean pauseAllJob();

    /**
     * 根据定时任务的Jobkey唤醒任务
     *
     * @param jobIds
     */
    Boolean resumeJob(List<Long> jobIds);

    /**
     * 唤醒所有被暂停的定时任务
     */
    Boolean resumeAllJob();


    /**
     * 根据jobKey删除定时任务、和触发器
     *
     * @param jobIds
     */
    Boolean deleteJob(List<Long> jobIds);


    /**
     * 根据jobKey删除定时任务、和触发器
     *
     * @param jobIds
     */
    Boolean deleteAllJob(List<Long> jobIds);

    /**
     * 根据任务id 查询任务
     *
     * @param jobId
     * @return
     */
    ScheduleJobPo queryJobInfoByJobId(Long jobId);

    /**
     * 根据用户id和任务id 查询任务
     */
    ScheduleJobPo queryJobByUserIdAndJobId(Long userId, Long jobId);

    /**
     * 根据用户id查询任务
     *
     * @param userId
     * @return
     */
    List<ScheduleJobPo> queryJobByUserId(Long userId);
}
